package com.yt.product.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yt.product.mapper.ProductInfoMapper;
import com.yt.product.models.bo.ProductInfoBO;
import com.yt.product.models.bo.ProductInfoSaveBO;
import com.yt.product.models.dto.ProductInfoDTO;
import com.yt.product.models.service.IProductInfoService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 产品信息服务实现（正确归属）
 */
@DubboService // 注意：若用Dubbo，需加此注解暴露服务
@Service
public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, ProductInfoDTO> implements IProductInfoService {

    @Resource
    private ProductInfoMapper productInfoMapper;

    // 实现产品添加逻辑（原逻辑需迁移至此，避免空实现）
    @Override
    public boolean add(ProductInfoSaveBO saveBO) {
        ProductInfoDTO dto = new ProductInfoDTO();
        BeanUtils.copyProperties(saveBO, dto);
        // 补充创建时间/更新时间（若BaseDTO未自动填充）
        Date now = new Date();
        dto.setCreateTime(now);
        dto.setUpdateTime(now);
        return this.insert(dto);
    }

    // 实现关联分页查询（核心：从ProductCategoryServiceImpl迁移至此）
    @Override
    public Page<ProductInfoDTO> queryProductWithRelation(Page<ProductInfoDTO> page, ProductInfoBO bo) {
        // 调用Mapper的关联查询，将结果设置到Page的records中
        List<ProductInfoDTO> productList = productInfoMapper.selectProductWithRelation(page, bo);
        return page.setRecords(productList);
    }

    // 实现根据分类ID统计产品数量（原逻辑迁移，若有需要）
    public int countByCategoryId(Long categoryId) {
        return productInfoMapper.countByCategoryId(categoryId);
    }

    @Override
    public ProductInfoDTO getByIdWithRelation(Long id) {
        return productInfoMapper.selectByIdWithRelation(id);
    }
}
